home *** CD-ROM | disk | FTP | other *** search
/ Programming an RTS Game with Direct3D / Programming an RTS Game with Direct3D.iso / Examples / Chapter 12 / Example 12.6 / mouse.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2006-07-16  |  2.9 KB  |  128 lines

  1. #include "mouse.h"
  2.  
  3.  
  4. //////////////////////////////////////////////////////////////////////////
  5. //                        MOUSE                                            //
  6. //////////////////////////////////////////////////////////////////////////
  7.  
  8. MOUSE::MOUSE()
  9. {
  10.     m_pMouseTexture = NULL;
  11.     m_pMouseDevice = NULL;
  12. }
  13.  
  14. MOUSE::~MOUSE()
  15. {
  16.     if(m_pMouseDevice != NULL)
  17.         m_pMouseDevice->Release();
  18.  
  19.     if(m_pMouseTexture != NULL)
  20.         m_pMouseTexture->Release();
  21. }
  22.  
  23. void MOUSE::InitMouse(IDirect3DDevice9* Dev, HWND wnd)
  24. {
  25.     try
  26.     {
  27.         m_pDevice = Dev;
  28.  
  29.         //Load texture and init sprite
  30.         D3DXCreateTextureFromFile(m_pDevice, "cursor/cursor.dds", &m_pMouseTexture);
  31.         D3DXCreateSprite(m_pDevice, &m_pSprite);
  32.  
  33.         //Get directinput object
  34.         LPDIRECTINPUT8 directInput = NULL;
  35.  
  36.         DirectInput8Create(GetModuleHandle(NULL),    // Retrieves the application handle
  37.                            0x0800,                    // v.8.0    
  38.                            IID_IDirectInput8,        // Interface ID
  39.                            (VOID**)&directInput,    // Our DirectInput Object
  40.                            NULL);
  41.  
  42.         //Acquire Default System mouse
  43.         directInput->CreateDevice(GUID_SysMouse, &m_pMouseDevice, NULL);        
  44.         m_pMouseDevice->SetDataFormat(&c_dfDIMouse);
  45.         m_pMouseDevice->SetCooperativeLevel(wnd, DISCL_EXCLUSIVE | DISCL_FOREGROUND);
  46.         m_pMouseDevice->Acquire();            
  47.  
  48.         //Get viewport size and init mouse location
  49.         D3DVIEWPORT9 v;
  50.         m_pDevice->GetViewport(&v);
  51.         m_viewport.left = v.X;
  52.         m_viewport.top = v.Y;
  53.         m_viewport.right = v.X + v.Width;
  54.         m_viewport.bottom = v.Y + v.Height;
  55.  
  56.         x = v.X + v.Width / 2.0f;
  57.         y = v.Y + v.Height / 2.0f;
  58.  
  59.         //Release Direct Input Object
  60.         directInput->Release();
  61.     }
  62.     catch(...)
  63.     {
  64.         debug.Print("Error in MOUSE::InitMouse()");
  65.     }    
  66. }
  67.  
  68. bool MOUSE::ClickLeft()
  69.     return m_mouseState.rgbButtons[0];
  70. }
  71.  
  72. bool MOUSE::ClickRight()
  73. {
  74.     return m_mouseState.rgbButtons[1];
  75. }
  76.  
  77. bool MOUSE::WheelUp()
  78. {
  79.     return m_mouseState.lZ > 0.0f;
  80. }
  81.  
  82. bool MOUSE::WheelDown()
  83. {
  84.     return m_mouseState.lZ < 0.0f;
  85. }
  86.  
  87. bool MOUSE::Over(RECT dest)
  88. {
  89.     if(x < dest.left || x > dest.right)return false;
  90.     if(y < dest.top || y > dest.bottom)return false;
  91.     return true;
  92. }
  93.  
  94. bool MOUSE::PressInRect(RECT dest)
  95. {
  96.     return ClickLeft() && Over(dest);
  97. }
  98.  
  99. void MOUSE::Update()
  100. {
  101.     //Retrieve mouse state
  102.     ZeroMemory(&m_mouseState, sizeof(DIMOUSESTATE));
  103.     m_pMouseDevice->GetDeviceState(sizeof(DIMOUSESTATE), &m_mouseState);
  104.  
  105.     //Update pointer
  106.     x += m_mouseState.lX * 1.0f;
  107.     y += m_mouseState.lY * 1.0f;
  108.  
  109.     //Keep mouse pointer within window
  110.     if(x < m_viewport.left)    x = m_viewport.left;
  111.     if(y < m_viewport.top)    y = m_viewport.top;
  112.     if(x > m_viewport.right)    x = m_viewport.right;
  113.     if(y > m_viewport.bottom)    y = m_viewport.bottom;
  114. }
  115.  
  116. void MOUSE::Paint()
  117. {    
  118.     if(m_pMouseTexture != NULL)
  119.     {
  120.         RECT src = {0,0,20,20};
  121.  
  122.         m_pSprite->Begin(D3DXSPRITE_ALPHABLEND);
  123.         m_pSprite->Draw(m_pMouseTexture, &src, NULL, &D3DXVECTOR3(x, y, 0.0f), 0xffffffff);
  124.         m_pSprite->End();
  125.     }    
  126. }
  127.